package demo1;

//class Test1<T extends Number> {
//    public Object[] array = new Object[10];
//
//    public T getPos(int pos) {
//        return (T) array[pos];
//    }
//    public void setValues(int pos, T value) {
//        array[pos] = value;
//    }
//}
class Test1<Number> {
    public Object[] array = new Object[10];

    public Number getPos(int pos) {
        return (Number) array[pos];
    }
    public void setValues(int pos, Number value) {
        array[pos] = value;
    }
}
public class Test {
    public static void main(String[] args) {
//        List<? super Integer> list = new ArrayList<>();
//// 编译失败，因为无法确定是否是Integer，有可能是Number
//        Integer i = list.get(0);
//// 编译失败，因为无法确定是否是Number，有可能是Object
//        Number m = list.get(1);
//// 编译正确，Object可以接受任意值
//        Object o = list.get(2);
    }
    public static void main2(String[] args) {
        Test1<? super Number> test1=new Test1<>();
        test1.setValues(1,10.2);
        test1.setValues(2,1);
    }
    public static void main1(String[] args) {
        Test1< Integer> test1=new Test1<>();
        //Test1<String> test2=new Test1<String>();//类型参数java.lang.String不在类型变量T的范围内
        test1.setValues(1,10);//编译成功

    }
}
